﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using ClickLand.CorporacionPlaza.AccesoDato.Fabricas;
using ClickLand.CorporacionPlaza.Comunes.Entidades;
using ClickLand.CorporacionPlaza.Comunes.Recursos;
using ClickLand.CorporacionPlaza.LogicaNegocio.Contratos;
using Logger;

namespace ClickLand.CorporacionPlaza.LogicaNegocio.Implementacion.ComandosVenta
{
    /// <summary> Coomando que consulta la lista de ventas de un contrato </summary>
    public class ConsultarXContrato :IComando<List<Venta>>
    {
        
        #region Atributos

        /// <summary> Objeto que posee la definicion de la venta para su insercion </summary>
        private readonly Contrato _contrato;

        private readonly DateTime _fechaInicio;
        private readonly DateTime _fechaFin;

        #endregion

        #region Contructor

        /// <summary> Constructor de la clase </summary>
        /// <param name="contrato">Datos para la insercion</param>
        /// <param name="fechaFin"> </param>
        /// <param name="fechaInicio"> </param>
        public ConsultarXContrato(Contrato contrato, DateTime fechaInicio, DateTime fechaFin)
        {
            _contrato = contrato;
            _fechaInicio = fechaInicio;
            _fechaFin = fechaFin;
        }

        #endregion

        #region Implementacion

        /// <summary> Metodo que ejecuta la accion del comando </summary>
        /// <returns></returns>
        public List<Venta> Ejecutar()
        {
            #region Instrumentacion Entrada
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.EntrandoMetodo, MethodBase.GetCurrentMethod().Name));
            #endregion
            var retorno = FabricaDao.ObtenerFabrica().ObtenerDaoVenta().ConsultarXContrato(_contrato,_fechaInicio,_fechaFin);
            #region Instrumentacion Salida
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.SaliendoMetodo, MethodBase.GetCurrentMethod().Name));
            #endregion
            return retorno;
            
        }

        #endregion
    }
}
